<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

/**
@ingroup CP_CORE
@nosubgrouping
@brief Gestion des messages et formulaires

La classe cpMessages peut être utilisée dans la partie publique
ou dans l'administration pour afficher des messages de succès
et/ou erreur en lien avec un formulaire.
*/
class cpMessages
{
	
	
	
	
	
	public $erreursFormulaire = array();
	public $erreurGenerale;
	public $messageInfo = array();
	public $messageOK;
	
	
	
	
	
	/// @name Définir les messages
	//@{
	
	
	/**
	Définit une erreur générale.
	
	@param	e		<b>cpErreur</b>		Instance de cpErreur
	*/
	public function erreurGenerale($e) {
		$this->erreurGenerale = $e;
	}
	
	
	/**
	Définit un message de succès.
	
	@param	msg		<b>string</b>		Message de succès
	*/
	public function messageOK($msg) {
		$this->messageOK = $msg;
	}
	
	
	/**
	Ajoute un message d'information.
	
	@param	msg		<b>string</b>		Message d'information
	*/
	public function ajouterMessageInfo($msg) {
		$this->messageInfo[] = $msg;
	}
	
	
	/**
	Ajoute un message d'erreur pour le champ de formulaire
	<var>$champ</var>. Un message d'erreur générale sera
	également affiché automatiquement.
	
	@param	msg		<b>string</b>		Message d'information
	*/
	public function ajouterErreurFormulaire($champ, $msg)
	{
		$this->erreursFormulaire[$champ] = $msg;
	}
	//@}
	
	
	
	
	
	/// @name Consulter les messages
	//@{
	
	
	/**
	Retourne le code HTML permettant d'afficher les
	messages d'erreurs, de succès et/ou d'information
	pour la page.
	
	@return	<b>string</b>	Code HTML des messages
	*/
	public function afficherMessages() {
		
		$return = '';
		
		if(isset($this->erreurGenerale)) {
			$return.= '<div class="msg msgErreurGenerale">'.$this->erreurGenerale->getMessage().'</div>';
		} elseif($this->erreursFormulairePresentes()) {
			$return.= '<div class="msg msgErreurGenerale">'.__('Le formulaire contient des erreurs.').'</div>';
		}
		
		if(!empty($this->messageOK)) {
			$return.='<div class="msg msgOk">'.$this->messageOK.'</div>';
		} 
		
		if(!empty($this->messageInfo)) {
			$return.='<div class="msg msgInfo">'.implode('<br/>', $this->messageInfo).'</div>';
		}
		
		return $return;
	}
	
	
	/**
	Indique si la page comporte des erreurs de formulaire.
	
	@return	<b>boolean</b>	Présence d'erreurs de formulaire
	*/
	public function erreursFormulairePresentes()
	{
		if(empty($this->erreursFormulaire)) {
			return false;
		}
		
		return true;
	}
	
	
	/**
	Retourne le message d'erreur correspondant affecté
	au champ <var>$champ</var> (ou NULL si aucune erreur
	n'est associée au champ).
	
	@return	<b>string</b>	Message d'erreur
	*/
	public function getErreurFormulaire($champ)
	{
		if(!isset($this->erreursFormulaire[$champ])) {
			return NULL;
		}
		return $this->erreursFormulaire[$champ];
	}
	
	/**
	Retourne le code HTML permettant d'afficher une erreur associée
	au champ <var>$champ</var> (ou une chaîne vide si aucune erreur
	n'est associée au champ).
	
	@return	<b>string</b>	HTML
	*/
	public function afficherErreurFormulaire($champ)
	{
		if(!isset($this->erreursFormulaire[$champ])) {
			return '';
		}
		return '<span class="erreur">'.$this->erreursFormulaire[$champ].'</span>';
	}
	//@}
	
	
	
	
	
	/// @name Champs de formulaire
	//@{
	
	
	/**
	Retourne le code HTML d'un champ de texte, accompagné
	du message d'erreur qui lui a été affecté s'il y a lieu.
	
	@param string|array	$nid		Element ID and name
	@param integer		$size		Element size
	@param integer		$max		Element maxlength
	@param string		$default	Element value
	@param string		$class		Element class name
	@param string		$tabindex	Element tabindex
	@param boolean		$disabled	True if disabled
	@param string		$extra_html	Extra HTML attributes
	
	@return	<b>string</b>	Code HTML
	*/
	public function field($nid, $size, $max, $default='', $class='', $tabindex='', $disabled=false, $extra_html='')
	{
		$html = form::field($nid, $size, $max, $default, $class, $tabindex, $disabled, $extra_html);
		
		if($this->erreursFormulaire[$nid]) {
			$html.= '<span class="erreur">'.html::escapeHTML($this->getErreurFormulaire($nid)).'</span>';
		}

		return $html;
	}
	
	
	/**
	Retourne le code HTML d'un champ de mot de passe, accompagné
	du message d'erreur qui lui a été affecté s'il y a lieu.
	
	@param string|array	$nid		Element ID and name
	@param integer		$size		Element size
	@param integer		$max		Element maxlength
	@param string		$default	Element value
	@param string		$class		Element class name
	@param string		$tabindex	Element tabindex
	@param boolean		$disabled	True if disabled
	@param string		$extra_html	Extra HTML attributes
	
	@return	<b>string</b>	Code HTML
	*/
	public function password($nid, $size, $max, $default='', $class='', $tabindex='', $disabled=false, $extra_html='')
	{
		$html = form::password($nid, $size, $max, $default, $class, $tabindex,$disabled, $extra_html);

		if($this->erreursFormulaire[$nid]) {
			$html.= '<span class="erreur">'.html::escapeHTML($this->getErreurFormulaire($nid)).'</span>';
		}

		return $html;
	}
	
	
	/**
	Retourne le code HTML d'un menu déroulant, accompagné
	du message d'erreur qui lui a été affecté s'il y a lieu.
	
	<var>$data</var> peut être un tableau dont les clés correspondent
	au titre qui sera affiché pour chaque option et les valeurs
	aux valeurs retournées par le champ pour chaque option, ou
	encore un tableau d'intances de {@link formSelectOption}. Si
	<var>$data</var> est un tableau de tableaux, les options
	seront groupées.
	
	@param string|array	$nid		Element ID and name
	@param mixed		$data		Select box data
	@param string		$default	Default value in select box
	@param string		$class		Element class name
	@param string		$tabindex	Element tabindex
	@param boolean		$disabled	True if disabled
	@param string		$extra_html	Extra HTML attributes
	
	@return	<b>string</b>	Code HTML
	*/
	public function combo($nid, $data ,$default='', $class='', $tabindex='', $disabled=false, $extra_html='')
	{		
		$html = form::combo($nid, $data, $default, $class, $tabindex,$disabled, $extra_html);
		
		if($this->erreursFormulaire[$nid]) {
			$html.= '<span class="erreur">'.html::escapeHTML($this->getErreurFormulaire($nid)).'</span>';
		}
		
		return $html;
	}
	
	
	/**
	Retourne le code HTML d'une zone de texte, accompagnée
	du message d'erreur qui lui a été affecté s'il y a lieu.
	
	@param string|array	$nid		Element ID and name
	@param integer		$cols		Number of columns
	@param integer		$rows		Number of rows
	@param string		$default	Element value
	@param string		$class		Element class name
	@param string		$tabindex	Element tabindex
	@param boolean		$disabled	True if disabled
	@param string		$extra_html	Extra HTML attributes
	
	@return	<b>string</b>	Code HTML
	*/
	public function textArea($nid, $cols, $rows, $default='', $class='', $tabindex='', $disabled=false, $extra_html='')
	{
		
		$html = form::textArea($nid, $cols, $rows, $default, $class, $tabindex, $disabled, $extra_html);
		
		if($this->erreursFormulaire[$nid]) {
			$html.= '<span class="erreur">'.html::escapeHTML($this->getErreurFormulaire($nid)).'</span>';
		}
		
		return $html;
	
	}
	
	
	/**
	Retourne le code HTML d'une case à cocher, accompagnée
	du message d'erreur qui lui a été affecté s'il y a lieu.
	
	@param string|array	$nid		Element ID and name
	@param string		$value		Element value
	@param boolean		$checked	True if checked
	@param string		$class		Element class name
	@param string		$tabindex	Element tabindex
	@param boolean		$disabled	True if disabled
	@param string		$extra_html	Extra HTML attributes
	
	@return	<b>string</b>	Code HTML
	*/
	public function checkbox($nid, $value, $checked='', $class='', $tabindex='', $disabled=false, $extra_html='')
	{
		
		$html = form::checkbox($nid, $value, $checked, $class, $tabindex, $disabled, $extra_html);
		
		if($this->erreursFormulaire[$nid]) {
			$html.= '<span class="erreur">'.html::escapeHTML($this->getErreurFormulaire($nid)).'</span>';
		}
		
		return $html;
		
	}
	//@}
	
	
}

?>